<?php
/**
 * @version 1.3
 * @author Misha Klomp
 * 
 * deze file doet:
 * - verbinding maken met DB
 * - de gebruiker tabel lezen/schrijven/updaten/deleten
 * 
 * hoe werkt dit:
 * - als je de constuctor aanroept met als input een versie ID dan worden alle atributen gevuld met deze info
 * 
 *     $test = new DbActie(15);
 *     
 *     if(!$test->getActieId()){
 *         echo "Niet gevonden.";
 *     } else {
 *         echo $test->getActieId();
 *     }
 * 
 */

require_once FILE_DB_DATABASE;
require_once FILE_DB_CONTROLE;

class DbGebruiker extends Database{
    
    private $gebruiker_id = '';
    private $voornaam = '';
    private $achternaam = '';
    private $login_naam = '';
    private $wachtwoord = '';
    private $recht_id = '';
    private $login_time = '';
    private $controle;


    public function DbGebruiker($id = ''){
        
        parent::__construct();
  
        if (!empty ($id)){
            $this->DbGetGebruikerData($id);
            
            return true;
        } else {
            $this->reset();
        }
        
        $this->controle = new DbControle();
    }
    
    public function getGebruikerId(){
        return $this->gebruiker_id;
    }
    
    public function getVoorNaam(){
        return $this->voornaam;
    }
    
    public function getAchterNaam(){
        return $this->achternaam;
    }
    
    public function getLoginNaam(){
        return $this->login_naam;
    }
    
    public function getWachtwoord(){
        return $this->wachtwoord;
    }
    
    public function getRechtId(){
        return $this->recht_id;
    }
    
    public function getLoginTime(){
        return $this->login_time;
    }

    public function setGebruikerId($gebruiker_id){
        $this->gebruiker_id = $gebruiker_id;
    }
    
    public function getGebruikersRecht(){
        
        $this->dbquery("SELECT * FROM (`gebruiker` AS G
                        INNER JOIN `recht_groep` AS R
                        ON R.recht_groep_id = G.recht_groep_id) 
                        WHERE gebruiker_id = '". $this->gebruiker_id ."'");
        
        if ($this->dbNumRows() == 1) {
            
            return $this->dbFetchArray();
            
        } else {
            return false;
        }
    }
    
    public function save ($voornaam, $achternaam, $login_naam, $wachtwoord, $recht_id, $sessie_id, $login_time){
        
        if ($this->controle->checkString($voornaam, 45, 1) && 
            $this->controle->checkString($achternaam, 45, 1) && 
            $this->controle->checkString($login_naam, 90, 1) && 
            !empty($wachtwoord) && !empty($recht_id)){
        
            $query = "INSERT INTO gebruiker (voor_naam, achter_naam, login_naam, wachtwoord, recht_id, sessie_id, login_time) 
                            VALUES ('" . mysql_real_escape_string($voornaam) . "', 
                                    '" . mysql_real_escape_string($achternaam) . "', 
                                    '" . mysql_real_escape_string($login_naam) . "', 
                                    '" . mysql_real_escape_string($wachtwoord) . "', 
                                    '" . mysql_real_escape_string($recht_id) . "',
                                    '" . mysql_real_escape_string($sessie_id) . "',
                                    '" . mysql_real_escape_string($this->controle->mysql_datetime($login_time)) . "')";

            if (DEBUG_LVL & DEBUG_LVL_QUERY)  echo __FILE__ . ' ' . __LINE__ .': ' .$query . '<br />';

            if (!$this->dbquery($query)){
                return false;
            }
            
            // Update class attr
            $this->gebruiker_id = mysql_insert_id();
            $this->voornaam = $voornaam;
            $this->achternaam = $achternaam;
            $this->login_naam = $login_naam;
            $this->wachtwoord = $wachtwoord;
            $this->recht_id = $recht_id;
            $this->sessie_id = $sessie_id;
            $this->login_time = $login_time;
            
        } else {
            return false;
        }
    }
    
    public function update ($voornaam, $achternaam, $login_naam, $wachtwoord, $recht_id, $login_time){
        
        if ($this->controle->checkString($voornaam, 45, 1) && 
            $this->controle->checkString($achternaam, 45, 1) && 
            $this->controle->checkString($login_naam, 90, 1) && 
            !empty($wachtwoord) && !empty($recht_id)){
            
            $query = "UPDATE gebruiker SET voor_naam = '" . mysql_real_escape_string($voornaam) . "', 
                                            achter_naam = '" . mysql_real_escape_string($achternaam) . "', 
                                            login_naam = '" . mysql_real_escape_string($login_naam) . "', 
                                            wachtwoord = '" . mysql_real_escape_string($wachtwoord) . "', 
                                            recht_id = '" . mysql_real_escape_string($recht_id) . "',
                                            login_time = '" . mysql_real_escape_string($login_time) . "'
                                        WHERE gebruiker . gebruiker_id ='" . mysql_real_escape_string($this->gebruiker_id) . "'";
            
            if (!$this->dbquery($query)){
                return false;
            }
                        
            $this->voornaam = $voornaam;
            $this->achternaam = $achternaam;
            $this->login_naam = $login_naam;
            $this->wachtwoord = $wachtwoord;
            $this->recht_id = $recht_id;
            $this->login_time = $login_time;
            
            return true;
            
        } else {
            return false;
        }
    }
    
    public function updateLoginTime($login_time){
            
        if (!empty($login_time)){
            
                $query = "UPDATE gebruiker SET login_time = '" . mysql_real_escape_string($login_time) . "'
                          WHERE gebruiker . gebruiker_id ='" . mysql_real_escape_string($this->gebruiker_id) . "'";
            
            if (!$this->dbquery($query)){
                return false;
            }

            $this->login_time = $login_time;
            
            return true;
            
        } else {
            return false;
        }
    }
    
    public function updateGebruikerRechtGroep($recht_groep_id){
        
        
        if (!empty($recht_groep_id)){
            
            echo $recht_groep_id;
            
                $query = "UPDATE gebruiker SET recht_groep_id = '" . mysql_real_escape_string($recht_groep_id) . "'
                          WHERE gebruiker . gebruiker_id ='" . mysql_real_escape_string($this->gebruiker_id) . "'";
            
                
            echo __FUNCTION__. ' ' .__FILE__.__LINE__.'<br />';
            echo '<pre>';
            var_dump($query);
            echo '</pre>';
            
            if (!$this->dbquery($query)){
                return false;
            }

            return true;
            
        } else {
            return false;
        }
    }
    
    public function updateWachtwoord($wachtwoord){
            
        if (!empty($wachtwoord)){
            
            echo __FUNCTION__. ' ' .__FILE__.__LINE__.'<br />';
            echo '<pre>';
            var_dump($wachtwoord);
            echo '</pre>';
            
                $query = "UPDATE gebruiker SET wachtwoord = '" . mysql_real_escape_string($wachtwoord) . "'
                          WHERE gebruiker . gebruiker_id ='" . mysql_real_escape_string($this->gebruiker_id) . "'";
            
            if (!$this->dbquery($query)){
                return false;
            }
            
            return true;
            
        } else {
            return false;
        }
    }
    
    public function delete(){
        
        $query = "DELETE FROM gebruiker WHERE gebruiker . gebruiker_id = '" . mysql_real_escape_string($this->gebruiker_id) . "'  LIMIT 1 ";
        
        if (!$this->dbquery($query)){
            return false;
        }

        if (DEBUG_LVL & DEBUG_LVL_QUERY)  echo __FILE__ . ' ' . __LINE__ .': ' .$query . '<br />';
        
        $this->reset();
    }    
    
    private function DbGetGebruikerData($id){
        
        $query = ("SELECT * FROM gebruiker WHERE gebruiker_id = '" . mysql_real_escape_string($id) . "' LIMIT 1 ");
                
        $this->dbquery($query);
        
        if($this->dbNumRows() == 1) {

            while ($row = $this->dbFetchArray()) {

                $this->gebruiker_id = $id;
                $this->voornaam = $row['voor_naam'];
                $this->achternaam = $row['achter_naam'];
                $this->login_naam = $row['login_naam'];
                $this->wachtwoord = $row['wachtwoord'];
                $this->recht_id = $row['recht_groep_id'];
            }
        } else {
            $this->reset();
            return false;
        }
                
        if (DEBUG_LVL & DEBUG_LVL_QUERY) echo __FILE__ . ' ' . __LINE__ .': ' .$query . '<br />';
    }
    
    
    // Function that checks if input ecuals to database.
    public function checkWachtwoord($wachtwoord){
        if($wachtwoord == $this->wachtwoord){
            
            echo __FUNCTION__. ' ' .__FILE__.__LINE__.'<br />';
            echo '<pre>';
            var_dump('Input Wachtwoord: ' . $wachtwoord);
            var_dump('Bestaande Wachtwoord: ' . $this->wachtwoord);
            echo '</pre>';
            
            return true;
        }
    }    
    
    public function wachtwoordBestaat($wachtwoord){
        $query = ("SELECT * FROM gebruiker WHERE wachtwoord = '" . mysql_real_escape_string($wachtwoord) . "'");
                
        $this->dbquery($query);
        
        if($this->dbNumRows() >= 1) {

            return true;
        } else {
            return false;
        }
    }
    
    private function reset(){
        
        $this->gebruiker_id = '';
        $this->voornaam = '';
        $this->achternaam = '';
        $this->login_naam = '';
        $this->wachtwoord = '';
        $this->recht_id = '';
        $this->login_time = '';
    }

    public function __destruct() {
        parent::__destruct();
    }
}

class TestDbGebruiker{
    public function TestDbGebruiker(){
        $test = new DbGebruiker;
        $test->save(misha, klomp, misha_klomp, test, 1);

        echo 'gebruikers ID: ' . $test->getGebruikerId() . '<br />';
        
        echo 'voor naam: ' . $test->getVoorNaam() . '<br />';
        
        echo 'achter naam: ' . $test->getAchterNaam() . '<br />';
        
        echo 'login naam: ' . $test->getLoginNaam() . '<br />';
        
        echo 'wachtwoord: ' . $test->getWachtwoord() . '<br />';
        
        echo 'rechten Bitfield: ' . $test->getRechtenBitfield() . '<br />';
        
        $test->update(test, tester, test_tester, test1, 2);

        echo 'gebruikers ID: ' . $test->getGebruikerId() . '<br />';
        
        echo 'voor naam: ' . $test->getVoorNaam() . '<br />';
        
        echo 'achter naam: ' . $test->getAchterNaam() . '<br />';
        
        echo 'login naam: ' . $test->getLoginNaam() . '<br />';
        
        echo 'wachtwoord: ' . $test->getWachtwoord() . '<br />';
        
        echo 'rechten Bitfield: ' . $test->getRechtenBitfield() . '<br />';
        
        $test->delete();
        
        echo 'gebruikers ID: ' . $test->getGebruikerId() . '<br />';
        
        echo 'voor naam: ' . $test->getVoorNaam() . '<br />';
        
        echo 'achter naam: ' . $test->getAchterNaam() . '<br />';
        
        echo 'login naam: ' . $test->getLoginNaam() . '<br />';
        
        echo 'wachtwoord: ' . $test->getWachtwoord() . '<br />';
        
        echo 'rechten Bitfield: ' . $test->getRechtenBitfield() . '<br />';
    }
}
?>